package stack;

import java.util.Stack;

/**
 * 题目：带有min函数的栈
 * @Author Gavin
 * @date 2021.12.19 21:31
 */
public class stack_1 {
    /**
     * 第一种方法：使用两个栈来处理
     * 该题目需要注意的点就是当出栈的时候需要更新最小值
     */
    private Stack<Integer> stack=new Stack<>();
    private Stack<Integer> min=new Stack<>();
    public void push(int x){
        stack.push(x);

        if(min.isEmpty()||x<=getMin())min.push(x);
    }
    //需要注意这里出栈的时候如果是最小元素需要把min栈里面的也出栈
    public Integer pop(){
        if(stack.peek()==getMin())min.pop();
        return stack.pop();
    }
    public int top(){
        return stack.peek();
    }
    public int getMin(){
        return min.peek();
    }
}
